package panel;



import java.awt.Graphics;
import java.util.ArrayList;

import org.uc3m.ed.interfaz_grafica.ventana.PanelDibujo;
import org.uc3m.ed.interfaz_grafica.ventana.VentanaPrincipal;
import org.uc3m.ed.tad.ITAD;
import org.uc3m.ed.tad.arbol.Heap;


import dibujo.DibujoHoja;


public class PanelDibujoHeap extends PanelDibujo{
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	/**
	 * 
	 */
	private Heap<Integer,Integer> _abb;
	
	/**
	 * 
	 */
	private DibujoHoja _dibujoArbol;
	
	private PanelArray _panel2;
	

	/**
	 * 
	 */
	private ArrayList<Integer> _vectorHeap;


	
	/**
	 * 
	 */
	public PanelDibujoHeap ()
	{
		super();
		_dibujoArbol= new DibujoHoja(this);
		_panel2=new PanelArray();
		
	}
	
	/* (non-Javadoc)
	 * @see org.uc3m.ed.interfaz_grafica.ventana.PanelDibujo#paint(java.awt.Graphics)
	 */
	@Override
	public  void paint (Graphics grafico) {
		try 
		{
			grafico.clearRect(0,0, getWidth(),getHeight());
			if (_abb!=null)
				_dibujoArbol.dibujar(grafico,_abb);
		}catch(Exception e){
			VentanaPrincipal.getConsola().escribirTextoError("CLASS::Heap::PanelDibujoHeap ERROR::1::"+e.toString()+"\n");
		}catch(Error e){
			VentanaPrincipal.getConsola().escribirTextoError("CLASS::Heap::PanelDibujoHeap ERROR::2::"+e.toString()+"\n");
		}
		
	}
	

	/* (non-Javadoc)
	 * @see org.uc3m.ed.interfaz_grafica.ventana.PanelDibujo#setEstructura(org.uc3m.ed.tad.ITAD)
	 */
	@Override
	public void setEstructura(ITAD<Integer> estructura) {
		try
		{
			_abb=(Heap<Integer,Integer>) estructura;
			_vectorHeap=null;
			if (_abb!=null && !_abb.estaVacio())
			{
				this._vectorHeap=new ArrayList<Integer>(100);
				_vectorHeap.add(0,_abb.raiz());
				crearArray((Heap<Integer, Integer>) _abb.subarbolIzquierdo(),true,0);
				crearArray((Heap<Integer, Integer>) _abb.subarbolDerecho(),false,0);
			}
			
			_panel2.setArray(_vectorHeap);
		}catch(Exception e){
			VentanaPrincipal.getConsola().escribirTextoError("CLASS::Heap::PanelDibujoHeap ERROR::3::"+e.toString()+"\n");
		}catch(Error e){
			VentanaPrincipal.getConsola().escribirTextoError("CLASS::Heap::PanelDibujoHeap ERROR::4::"+e.toString()+"\n");
		}
	}

	private void crearArray(Heap<Integer, Integer> _abb,boolean izq,int posicion)throws Exception,Error {
		int posicionNueva=0;

		if(_abb!=null)
		{
			if (izq)
			{
				if(posicion!=0)
					posicionNueva=posicion*2+1;
				else
				{
					posicionNueva=1;
				}
			}
			else
			{
				if(posicion!=0)
					posicionNueva=posicion*2+2;
				else
					posicionNueva=2;
			}
			
			//JOptionPane.showMessageDialog(new JFrame (),posicionNueva+" ele "+_abb.raiz() );
			if (_vectorHeap.size()<=posicionNueva)
			{
				for(int i=_vectorHeap.size();i<=posicionNueva;i++)
					_vectorHeap.add(i, 0);
			}
				_vectorHeap.set(posicionNueva, _abb.raiz());
			crearArray((Heap<Integer, Integer>) _abb.subarbolIzquierdo(),true,posicionNueva);
			crearArray((Heap<Integer, Integer>) _abb.subarbolDerecho(),false,posicionNueva);
		}
		
	}

	/* (non-Javadoc)
	 * @see org.uc3m.ed.interfaz_grafica.ventana.PanelDibujo#getEstructura()
	 */
	@Override
	public ITAD<Integer> getEstructura(){
		return _abb;
	}
	
	
	
}
